grammar MermaidFlow;

row
 : nodeFrom arrow nodeTo
 ;
nodeFrom
 : id nameDef
 | id
 ;
nodeTo
 : id nameDef
 | id
 ;
nameDef
 : LEFT NAME RIGT
 ;
id
 : NAME
 ;

condition
 : NAME
 ;

arrow
  : '-->'
  | '--'   condition  '-->'
  | '-->|' condition '|'
  ;

/*
 * Lexer rules
 */
LEFT
   : [({[]+
   ;
RIGT
   : [)}\]]+
   ;
NAME
    : [a-zA-Z0-9_\-!\u4e00-\u9fa5]+
    ;
WHITESPACE
    : [ \t] -> skip
    ;